#ifndef __DJI_H
#define __DJI_H

#ifdef __cplusplus
extern "C"{
#endif

#include "rttypes.h"
#include "motor_def.h"

/* 滤波系数设置为1的时候即关闭滤波 */
#define SPEED_SMOOTH_COEF 0.9f      // 最好大于0.85
#define CURRENT_SMOOTH_COEF 0.9f     // 必须大于0.9
#define ECD_ANGLE_COEF_DJI 0.043945f // (360/8192),将编码器值转化为角度制

/* DJI电机CAN反馈信息*/
typedef struct
{
    rt_uint16_t last_ecd;        // 上一次读取的编码器值
    rt_uint16_t ecd;             // 0-8191,刻度总共有8192格
    float angle_single_round; // 单圈角度
    float speed_rpm;          // 转速
    float speed_aps;          // 角速度,单位为:度/秒
    rt_int16_t real_current;     // 实际电流
    rt_uint8_t temperature;      // 温度 Celsius

    float total_angle;   // 总角度,注意方向
    rt_int32_t total_round; // 总圈数,注意方向
    float total_output_round; //输出轴总圈数
} DJI_Motor_Measure_s;

/**
 * @brief DJI intelligent motor typedef
 *
 */
typedef struct
{
    DJI_Motor_Measure_s measure;            // 电机测量值
    Motor_Control_Setting_s motor_settings; // 电机设置
    Motor_Controller_s motor_controller;    // 电机控制器
    // 分组发送设置
    uint8_t sender_group;
    uint8_t message_num;
    Motor_Type_e motor_type;        // 电机类型
    Motor_Working_Type_e stop_flag; // 启停标志
    CanMessage_t CanMessage;
    rt_uint8_t offline_manage_event;
    rt_slist_t list;                   // 单链表节点

} DJIMotor_t;


DJIMotor_t *DJIMotorInit(Motor_Init_Config_s *config);


void DJIMotorSetRef(DJIMotor_t *motor, float ref);
void DJIMotorChangeFeed(DJIMotor_t *motor, Closeloop_Type_e loop, Feedback_Source_e type);
void DJIMotorControl();
void DJIMotorStop(DJIMotor_t *motor);
void DJIMotorEnable(DJIMotor_t *motor);
void DJIMotorOuterLoop(DJIMotor_t *motor, Closeloop_Type_e outer_loop);
void DecodeDJIMotor(struct rt_can_msg can_msg,rt_device_t canbus);



#ifdef __cplusplus
}
#endif

#endif // DJI_H